package Negocio;

import ClassesBasicas.SumulaJogo;
import Repositorio.RepSumulaJogo;
import erro.*;
import java.util.ArrayList;


/**
 *
 * @author Natalie
 */
public class NegocioSumulaJogo {
	private RepSumulaJogo rep;
	
	public NegocioSumulaJogo(){
		rep = new RepSumulaJogo();
	}
	
	/**
	 * Testa se a SumulaJogo ja existe, caso exista, retorna true, 
         * caso contrario, retorna false.
	 * 
	 */
	
public boolean existeSumulaJogo(SumulaJogo sj) throws NegocioException {
	SumulaJogo tmp = new SumulaJogo();
		
	tmp = consultar(sj.getCodSumula());
		
		if(tmp != null)
                    return true;
		else
                    return false;
	}
	
	/**
	 * Validacao dos campos da sumula antes de salvar
	 * 
	 * @param sj
	 * @throws NegocioException
	 * 
	 */
	
public void salvar(SumulaJogo sj) throws NegocioException{
		
		//verifica se a sumula é nula ou vazia    
		if(sj == null || sj.equals("")){
			throw new NegocioException( " Sumula inválida ou nula. Verifique se os campos informados estão corretos! " );
		}
		
		//verifica o placar do Jogo
		if(sj.getPlacarJogo() == null || sj.getPlacarJogo().equals("")){
			throw new NegocioException(" Placar do Jogo inválido! ");
		}
		
		//verifica se o nome do Ator e valido
		if(!ValidacoesGerais.isNomeValid(sj.getAtorSumula())){
			throw new NegocioException("Este campo não pode conter caracteres numéricos nem especiais!");
		}
		
		if(sj.getCodEstadio()<0){
			throw new NegocioException("Código inválido!");
		}
		
		try {
                    rep.salvar(sj);
		} catch (ConexaoException e) {
			throw new NegocioException("Verifique a conexão com o Banco de Dados!"+e.getMessage());
		}
		catch (RepositorioException e) {
			throw new NegocioException("Erro ao salvar um Estádio!"+e.getMessage());
		}
	}
	
	/*/
	 * Valida e exclui uma sumula pelo código
	 * 
	 * @param codSumula
	 * @throws NegocioException
	 * 
	 */
	
public void excluirSumula(int codSumula) throws NegocioException{
		
		if(codSumula <= 0){
			throw new NegocioException("Código Inválido!");
		}
		
		try {
			rep.excluirSumula(codSumula);
		} catch (ConexaoException e) {
			
		throw new NegocioException("Verifique a conexão com o Banco de Dados!"+e.getMessage());
		} catch (RepositorioException e) {
			throw new NegocioException("Erro ao excluir um Estádio!"+e.getMessage());
		}
	}
	
	// Valida e exclui um jogo pela sumula
        
 public void excluirJogo(int codJogo) throws NegocioException{
		
		if(codJogo <= 0){
			throw new NegocioException("Código Inválido!");
		}
		
		try {
			rep.excluirJogo(codJogo);
		} catch (ConexaoException e) {
			
		throw new NegocioException("Verifique a conexão com o Banco de Dados!"+e.getMessage());
		} catch (RepositorioException e) {
			throw new NegocioException("Erro ao excluir um Estádio!"+e.getMessage());
		}
	}
	
        /** 
	 * Valida e consulta uma Sumula pelo código
	 * 
	 * @param codSumula
	 * @return
	 * @throws NegocioException
	 * 
	 */
	
public SumulaJogo consultar(int codSumula) throws NegocioException{
		 SumulaJogo sj = null;
		 
		 if(codSumula <= 0){
			 throw new NegocioException("Codigo Inválido!");
		 }
		 
		 try {
                    sj = rep.consultar(codSumula);
		} catch (ConexaoException e) {
			throw new NegocioException("Verifique a conexão com o Banco de Dados! "+e.getMessage());
		} catch (RepositorioException e) {
			throw new NegocioException("Erro ao consultar um Estádio! "+e.getMessage());
		}
		 return sj;
        }
        
        /**
         * Altera uma Sumula pelo código.
         * 
         * @param es
         * @throws GeralException
         * @throws TerminalException 
         */

public void alterar (SumulaJogo sj) throws GeralException, TerminalException{
        
           if (.getCodSumula().equals("") || (sj.getCodSumula()== null)){
            throw new GeralException("Codigo Inválido!");
            
            }*/
            try {
                 rep.alterar(sj);
                 
            } catch (ConexaoException ex){
                throw new TerminalException("O banco de dado não está acessível no momento!");
            }
            
            catch (RepositorioException ex){
                throw new TerminalException("Erro ao alterar um Estádio!");
            }
        }
	
	/**
	 * Lista todas as Sumulas, caso não encontre, retorna uma lista vazia.
	 * 
	 * @return ArrayList<SumulaJogo>
	 * @throws NegocioException
	 * 
	 */
	
public ArrayList<SumulaJogo> listar() throws NegocioException{
		
		ArrayList<SumulaJogo> lista = null;
		
		try {
			lista = (ArrayList<SumulaJogo>) rep.listar();
		} 
                
                catch (ConexaoException e) {
			throw new NegocioException("Verifique a conexão com o Banco de Dados! "+e.getMessage());
		}
                
                catch (RepositorioException e) {
			throw new NegocioException("Erro ao listar as Sumulas! " +e.getMessage());
		}
                return lista;
	}
}

